package com.ym.medical.service;

import com.github.pagehelper.PageInfo;
import com.ym.common.enums.UserUserTypeEnum;
import com.ym.core.shiro.service.UserAccLoginService;
import com.ym.core.shiro.service.WxLoginService;
import com.ym.core.utils.tkmybatis.IBaseSV;
import com.ym.medical.domain.entity.UserEntity;
import com.ym.medical.domain.entity.UserPatientViewEntity;
import com.ym.medical.domain.param.UserParam;
import com.ym.medical.domain.vo.DoctorVo;
import com.ym.medical.domain.vo.LoginVO;
import com.ym.medical.domain.vo.PatientVo;
import com.ym.medical.domain.vo.UserDoctViewVo;

/**
 * 终端用户Service接口
 *
 * @author ym
 * @date 2020-08-17
 */
public interface IUserSV extends IBaseSV<UserEntity>, WxLoginService, UserAccLoginService {

	/**
	 * 授权微信个人信息
	 *
	 * @param encryptedData   加密数据
	 * @param iv              向量
	 * @param recommendUserId 推荐人用户id
	 */
	LoginVO authorizeInfo(UserPatientViewEntity wxUserDetail, String encryptedData, String iv, Long recommendUserId);

	/**
	 * 手机号码授权
	 *
	 * @param userId
	 * @param phone
	 * @return
	 */
	String authorizedPhone(long userId, String phone);

	/**
	 * 刷新当前用户
	 *
	 * @param
	 */
	void refreshPatientUser();

	/**
	 * 根据手机号查找用户
	 *
	 * @param phoneNumber
	 * @param inPatientsWith
	 * @return
	 */
	UserEntity selectByPhone(String phoneNumber, UserUserTypeEnum inPatientsWith);

	/**
	 * 禁用账号
	 *
	 * @param userIds
	 * @param userType
	 */
	int disableUser(Long[] userIds, UserUserTypeEnum userType);

	/**
	 * 启用账号
	 *
	 * @param userIds
	 * @param userType
	 */
	int enableUser(Long[] userIds, UserUserTypeEnum userType);

	/**
	 * 根据ID查找
	 * @param userId
	 * @return
	 */
	UserEntity findById(Long userId);

	/**
	 * 检测用户是否存在
	 *
	 * @param phone
	 * @param userType y
	 */
	UserEntity existingUser(String phone, String userType);

	/**
	 *
	 * @param realName
	 * @param phoneNo
	 * @return
	 */
	UserEntity selectByNameAndPh(String realName, String phoneNo);
	/**
	 * 患者用户列表
	 *
	 * @param pageNo
	 * @param limit
	 * @param userModel
	 * @return
	 */
    PageInfo<PatientVo> getPatientList(int pageNo, int limit, UserParam userModel, String blankUserSate);
	/**
	 * 医生账号列表
	 *
	 * @param pageNo
	 * @param limit
	 * @param userModel
	 * @return
	 */
    PageInfo<DoctorVo> getDoctorList(int pageNo, int limit, UserParam userModel);
	/**
	 * 患者添加
	 *
	 * @param user
	 * @return
	 */
	int addPatient(UserParam user);
	/**
	 * 医生账号添加
	 *
	 * @param userModel
	 * @return
	 */
	int addDoctor(UserParam userModel);

	/**
	 * 医生用户视图表
	 *
	 * @param currId
	 * @return
	 */
	UserDoctViewVo selectUserDoctView(Long currId);
}
